<!DOCTYPE html>
<html lang="zh">
<head><meta name="generator" content="Hexo 3.8.0">
    <meta charset="utf-8">
<title>python助力小程序“订阅消息”群推送 - 摆柿阔落 | 肥宅快乐窝</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<script data-ad-client="ca-pub-7322587367236750" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>



<meta name="description" content="近期小程序要把“模板消息”下线，取而代之的是“订阅消息”。而“订阅消息”也做出了一些改变，推出了“一次性订阅”消息，小程序可以引导用户订阅一次消息">
<meta name="keywords" content="小程序">
<meta property="og:type" content="article">
<meta property="og:title" content="python助力小程序“订阅消息”群推送">
<meta property="og:url" content="https://susreal.com/article/2020/miniprogram-2/index.html">
<meta property="og:site_name" content="摆柿阔落 | 肥宅快乐窝">
<meta property="og:description" content="近期小程序要把“模板消息”下线，取而代之的是“订阅消息”。而“订阅消息”也做出了一些改变，推出了“一次性订阅”消息，小程序可以引导用户订阅一次消息">
<meta property="og:locale" content="zh-CN">
<meta property="og:image" content="https://susreal.com/article/2020/miniprogram-2/0.png">
<meta property="og:updated_time" content="2020-02-06T10:59:59.938Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="python助力小程序“订阅消息”群推送">
<meta name="twitter:description" content="近期小程序要把“模板消息”下线，取而代之的是“订阅消息”。而“订阅消息”也做出了一些改变，推出了“一次性订阅”消息，小程序可以引导用户订阅一次消息">
<meta name="twitter:image" content="https://susreal.com/article/2020/miniprogram-2/0.png">







<link rel="icon" href="/images/favicon.ico">


<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.7.2/css/bulma.css">
<link rel="stylesheet" href="https://cdn.bootcss.com/font-awesome/5.8.1/css/all.css">
<link rel="stylesheet" href="https://fonts.loli.net/css?family=Ubuntu:400,600|Source+Code+Pro">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@9.12.0/styles/atom-one-light.css">




    
    <style>body>.footer,body>.navbar,body>.section{opacity:0}</style>
    



    
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lightgallery@1.6.8/dist/css/lightgallery.min.css">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/justifiedGallery@3.7.0/dist/css/justifiedGallery.min.css">
    




<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/outdatedbrowser@1.1.5/outdatedbrowser/outdatedbrowser.min.css">







<link rel="stylesheet" href="/css/back-to-top.css">




<script async src="https://www.googletagmanager.com/gtag/js?id=UA-133843246-1"></script>
<script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());

    gtag('config', 'UA-133843246-1');
</script>




<script>
var _hmt = _hmt || [];
(function() {
    var hm = document.createElement("script");
    hm.src = "//hm.baidu.com/hm.js?5d19841c9c5598fa6259779af2276ded";
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(hm, s);
})();
</script>






<link rel="stylesheet" href="/css/progressbar.css">
<script src="https://cdn.jsdelivr.net/npm/pace-js@1.0.2/pace.min.js"></script>



    



    
        <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
    




<link rel="stylesheet" href="/css/style.css">
</head>
<body class="is-2-column">
    <nav class="navbar navbar-main">
    <div class="container">
        <div class="navbar-brand is-flex-center">
            <a class="navbar-item navbar-logo" href="/">
            
                <img src="/images/logo.png" alt="python助力小程序“订阅消息”群推送" height="28">
            
            </a>
        </div>
        <div class="navbar-menu">
            
            <div class="navbar-start">
                
                <a class="navbar-item" href="/archives">全部</a>
                
                <a class="navbar-item" href="/categories/PM">PM</a>
                
                <a class="navbar-item" href="/categories/Coder">Coder</a>
                
                <a class="navbar-item" href="/playground">广场</a>
                
                <a class="navbar-item" href="/board">留言</a>
                
            </div>
            
            <div class="navbar-end">
                
                
                
                <a class="navbar-item search" title="搜索" href="javascript:;">
                    <i class="fas fa-search"></i>
                </a>
                
            </div>
        </div>
    </div>
</nav>
    
    <section class="section">
        <div class="container">
            <div class="columns">
                <div class="column is-8-tablet is-8-desktop is-9-widescreen has-order-2 column-main"><div class="card">
    
    <div class="card-image">
        <span class="image is-7by1">
            <img class="thumbnail" src="/article/2020/miniprogram-2/0.png" alt="python助力小程序“订阅消息”群推送">
        </span>
    </div>
    
    <div class="card-content article ">
        
        <div class="level article-meta is-size-7 is-uppercase is-mobile is-overflow-x-auto">
            <div class="level-left">
                <!--added by susreal, top-->
                
                <!--end-->
                <time class="level-item has-text-grey" datetime="2020-02-06T10:50:39.000Z">2020-02-06</time>
                
                <div class="level-item">
                <a class="has-link-grey -link" href="/categories/Coder/">Coder</a>
                </div>
                
                
                <span class="level-item has-text-grey">
                    
                    
                    8 分钟 读完 (大约 1245 个字)
                </span>
                
            </div>
        </div>
        
        <h1 class="title is-size-3 is-size-4-mobile has-text-weight-normal">
            
                python助力小程序“订阅消息”群推送
            
        </h1>
        <div class="content">
            <p>近期小程序要把“模板消息”下线，取而代之的是“订阅消息”。而“订阅消息”也做出了一些改变，推出了“一次性订阅”消息，小程序可以引导用户订阅一次消息<a id="more"></a>：</p>
<img src="/article/2020/miniprogram-2/1.png" title="订阅消息">
<p>为什么叫“一次性订阅”呢，如果用户此处“允许”，那么他无论多久之后，都可以收到一次消息；也就是说，如果用户多次允许，将可以收到多次消息。这是一个额度累计的过程，用户允许得越多，能收到的额度也就越大。</p>
<h1 id="1-弹窗时机的选择"><a href="#1-弹窗时机的选择" class="headerlink" title="1.弹窗时机的选择"></a>1.弹窗时机的选择</h1><p>这是一个非常好的用户唤回方式，当然了，用户也可以通过设置永久拒绝你给他发送消息。所以在我的小程序“头像挂件君”中，提示用户允许发送消息的时机，出现在一个他完成完整流程的地方，也就是用户成功导出作品后，我会提醒他要不要接受。</p>
<p>之所以这样设计，是因为我想把“一次性”变成“永久”，在用户最满意、最高兴的时候，弱弱地问他一句“小哥哥小姐姐，要不要订阅一下？”此时的成功率将非常高。</p>
<p>粗看了一下数据，在近3天的活跃用户中，有10%的用户成功订阅消息，个人觉得这还是一个比较高的比例了。</p>
<h1 id="2-发送订阅消息"><a href="#2-发送订阅消息" class="headerlink" title="2.发送订阅消息"></a>2.发送订阅消息</h1><p>用户允许发送消息后，微信提供了<a href="https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html" target="_blank" rel="noopener">发送订阅消息</a>的方法：subscribeMessage.send，支持HTTPS调用，也支持云调用。这里我们选择了HTTPS调用，时机是出现一款新的贴纸后，告诉所有的订阅用户。</p>
<blockquote>
<p>POST <a href="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN" target="_blank" rel="noopener">https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN</a></p>
</blockquote>
<p>发送订阅消息由于微信的限制，需要逐条请求，也就是每个用户请求一次，而不能一次性推送完。由于开发能力有限，我没有时间去做一套完整精密的推送系统，所以这里就借助python来实现自动化。</p>
<h2 id="2-1-将所有订阅用户的openid导出"><a href="#2-1-将所有订阅用户的openid导出" class="headerlink" title="2.1 将所有订阅用户的openid导出"></a>2.1 将所有订阅用户的openid导出</h2><p>因为我使用的是微信自带的数据库，所以可以直接在后台进行导出，选择导出为csv文件，名为id.csv，格式如下：</p>
<table>
<thead>
<tr>
<th>_id</th>
<th>subscribeTime</th>
</tr>
</thead>
<tbody>
<tr>
<td>a</td>
<td>1580961993978</td>
</tr>
<tr>
<td>b</td>
<td>1580961993979</td>
</tr>
<tr>
<td>c</td>
<td>1580961993980</td>
</tr>
</tbody>
</table>
<h2 id="2-2-配置config-json文件"><a href="#2-2-配置config-json文件" class="headerlink" title="2.2 配置config.json文件"></a>2.2 配置config.json文件</h2><p>这个文件是每次都要修改的，因为包含了你推送的内容以及APPID和APPSECRET：</p>
<figure class="highlight js hljs"><table><tr><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="hljs-string">"APPID"</span>: <span class="hljs-string">"你的APPID"</span>,</span><br><span class="line">    <span class="hljs-string">"APPSECRET"</span>: <span class="hljs-string">"你的APPSECRET"</span>,</span><br><span class="line">    <span class="hljs-string">"template_id"</span>: <span class="hljs-string">"你的模板ID"</span>,</span><br><span class="line">    <span class="hljs-string">"touser"</span>: <span class="hljs-string">""</span>,</span><br><span class="line">    <span class="hljs-string">"page"</span>: <span class="hljs-string">"你希望的打开路径，例如：pages/index/index"</span>,</span><br><span class="line">    <span class="hljs-string">"data"</span>: &#123;</span><br><span class="line">        <span class="hljs-string">"thing1"</span>: &#123;</span><br><span class="line">            <span class="hljs-string">"value"</span>: <span class="hljs-string">"🎩帽子系列"</span></span><br><span class="line">        &#125;,</span><br><span class="line">        <span class="hljs-string">"time2"</span>: &#123;</span><br><span class="line">            <span class="hljs-string">"value"</span>: <span class="hljs-string">"2020-02-06"</span></span><br><span class="line">        &#125;,</span><br><span class="line">        <span class="hljs-string">"thing3"</span>: &#123;</span><br><span class="line">            <span class="hljs-string">"value"</span>: <span class="hljs-string">"生日帽、安全帽~"</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<h2 id="2-3-推送逻辑文件push-py"><a href="#2-3-推送逻辑文件push-py" class="headerlink" title="2.3 推送逻辑文件push.py"></a>2.3 推送逻辑文件push.py</h2><p>这里是完整的推送逻辑，首先读取config.json文件中的APPID和APPSECRET，以获得access_token；然后根据导出的id.csv文件逐一推送：</p>
<figure class="highlight python hljs"><table><tr><td class="code"><pre><span class="line"><span class="hljs-comment">#!/usr/bin/env python</span></span><br><span class="line"><span class="hljs-comment"># -*- coding: utf-8 -*-</span></span><br><span class="line"><span class="hljs-keyword">import</span> sys</span><br><span class="line">reload(sys)</span><br><span class="line">sys.setdefaultencoding(<span class="hljs-string">'utf8'</span>)</span><br><span class="line"></span><br><span class="line"><span class="hljs-keyword">import</span> io</span><br><span class="line"><span class="hljs-keyword">import</span> requests</span><br><span class="line"><span class="hljs-keyword">import</span> json</span><br><span class="line"><span class="hljs-keyword">import</span> xlwt</span><br><span class="line"><span class="hljs-keyword">import</span> time</span><br><span class="line"><span class="hljs-keyword">import</span> csv</span><br><span class="line"></span><br><span class="line"><span class="hljs-comment"># 读取id文件</span></span><br><span class="line">uidFile = io.open(<span class="hljs-string">"./id.csv"</span>, <span class="hljs-string">"r"</span>, encoding=<span class="hljs-string">'utf-8'</span>)</span><br><span class="line">uids = csv.reader(uidFile)</span><br><span class="line"></span><br><span class="line"><span class="hljs-comment"># 读取配置文件</span></span><br><span class="line">configFile = io.open(<span class="hljs-string">"./config.json"</span>, <span class="hljs-string">"r"</span>, encoding=<span class="hljs-string">'utf-8'</span>)</span><br><span class="line">config = json.load(configFile)</span><br><span class="line"></span><br><span class="line"><span class="hljs-comment"># 获取access_token</span></span><br><span class="line">APPID = config[<span class="hljs-string">'APPID'</span>]</span><br><span class="line">APPSECRET = config[<span class="hljs-string">'APPSECRET'</span>]</span><br><span class="line"><span class="hljs-keyword">del</span> config[<span class="hljs-string">'APPID'</span>]</span><br><span class="line"><span class="hljs-keyword">del</span> config[<span class="hljs-string">'APPSECRET'</span>]</span><br><span class="line">getAccessTokenUrl = <span class="hljs-string">"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;appid=%s&amp;secret=%s"</span> % (APPID,APPSECRET)</span><br><span class="line">response = requests.get(url=getAccessTokenUrl).json()</span><br><span class="line">access_token = response[<span class="hljs-string">'access_token'</span>]</span><br><span class="line"></span><br><span class="line"><span class="hljs-comment"># 推送地址</span></span><br><span class="line">pushUrl = <span class="hljs-string">"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="</span> + access_token</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="hljs-comment"># 日志excel</span></span><br><span class="line">logExcel = xlwt.Workbook(encoding=<span class="hljs-string">'utf-8'</span>, style_compression=<span class="hljs-number">0</span>)</span><br><span class="line">sheet = logExcel.add_sheet(<span class="hljs-string">'log'</span>, cell_overwrite_ok=<span class="hljs-keyword">True</span>)</span><br><span class="line">sheet.write(<span class="hljs-number">0</span>,<span class="hljs-number">0</span>,<span class="hljs-string">"_id"</span>)</span><br><span class="line">sheet.write(<span class="hljs-number">0</span>,<span class="hljs-number">1</span>,<span class="hljs-string">"response"</span>)</span><br><span class="line"></span><br><span class="line">index = <span class="hljs-number">0</span></span><br><span class="line"><span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> uids:</span><br><span class="line">    <span class="hljs-keyword">if</span> index == <span class="hljs-number">0</span>:</span><br><span class="line">        index = index + <span class="hljs-number">1</span></span><br><span class="line">        <span class="hljs-keyword">continue</span></span><br><span class="line"></span><br><span class="line">    uid = x[<span class="hljs-number">0</span>]</span><br><span class="line"></span><br><span class="line">    <span class="hljs-comment"># 执行推送</span></span><br><span class="line">    print(<span class="hljs-string">"====================="</span>)</span><br><span class="line">    config[<span class="hljs-string">'touser'</span>] = uid</span><br><span class="line">    data = json.dumps(config)</span><br><span class="line">    response = requests.post(url=pushUrl,data=data)</span><br><span class="line">    print(<span class="hljs-string">"推送至:"</span>+uid)</span><br><span class="line">    print(response.text)</span><br><span class="line">    </span><br><span class="line">    <span class="hljs-comment"># 写入excel</span></span><br><span class="line">    sheet.write(index,<span class="hljs-number">0</span>,uid)</span><br><span class="line">    sheet.write(index,<span class="hljs-number">1</span>,response.text)</span><br><span class="line">    index = index + <span class="hljs-number">1</span></span><br><span class="line"></span><br><span class="line">logFileName = <span class="hljs-string">r"./pushLog_%s.xls"</span> % time.strftime(<span class="hljs-string">"%Y%m%d%H%M%S"</span>, time.localtime()) </span><br><span class="line">logExcel.save(logFileName)  <span class="hljs-comment"># 在字符串前加r，声明为raw字符串，这样就不会处理其中的转义了。否则，可能会报错</span></span><br></pre></td></tr></table></figure>
<p>将上述三个文件id.csv、config.json以及push.py放在同一个文件夹就大功告成啦，然后在该目录执行以下代码：</p>
<figure class="highlight plain hljs"><table><tr><td class="code"><pre><span class="line">python push.py</span><br></pre></td></tr></table></figure>
<p>就可以完成批量推送啦！此外，每次执行还会输出一个log文件，文件名为pushLog_xxxxx.xls，记录了每个人的推送结果。</p>
<hr>
<p>使用python完成小程序“订阅消息”的群推送就介绍到这啦，最后给自己的小程序打个广告，大家可以去体验一下订阅流程喔~</p>
<img src="/article/2020/miniprogram-2/2.png" title="小程序体验入口">
        </div>
        <!--added by susreal, article visit calculation-->
        
            <div class="level is-size-7 has-text-grey">
                <div class="level-left">
                    <i class="far fa-eye"></i>
                    <span>&nbsp;</span>
                    <span id="busuanzi_container_page_pv" style="display: inline;">
                        <span id="busuanzi_value_page_pv">0</span>
                    </span>
                </div>
            </div>
        
        <!--end-->
        
        <div class="level is-size-7 is-uppercase">
            <div class="level-start">
                <div class="level-item">
                    <span class="is-size-6 has-text-grey has-mr-7">#</span>
                    <a class="has-link-grey -link" href="/tags/小程序/">小程序</a>
                </div>
            </div>
        </div>
        
        
        
    </div>
</div>



    
        <div class="card">
            <div class="card-content">
                <h3 class="menu-label has-text-centered">喜欢这篇文章？投喂一下吧！(๑•ㅂ•́)و✧ </h3>
                <div class="buttons is-centered">
                    
                        
<a class="button is-info donate">
    <span class="icon is-small">
        <i class="fab fa-alipay"></i>
    </span>
    <span>支付宝</span>
    <div class="qrcode"><img src="/images/alipay.JPG" alt="支付宝"></div>
</a>

                        
                        
<a class="button is-success donate">
    <span class="icon is-small">
        <i class="fab fa-weixin"></i>
    </span>
    <span>微信</span>
    <div class="qrcode"><img src="/images/wechat.JPG" alt="微信"></div>
</a>

                        
                </div>
            </div>
        </div>
    



<div class="card card-transparent">
    <div class="level post-navigation is-flex-wrap is-mobile">
        
        <div class="level-start">
            <a class="level level-item has-link-grey  article-nav-prev" href="/article/2020/yaktalk-1/">
                <i class="level-item fas fa-chevron-left"></i>
                <span class="level-item">“大学生社区”项目复盘总结</span>
            </a>
        </div>
        
        
        <div class="level-end">
            <a class="level level-item has-link-grey  article-nav-next" href="/article/2020/miniprogram/">
                <span class="level-item">头像挂件君 | 小程序诞生记</span>
                <i class="level-item fas fa-chevron-right"></i>
            </a>
        </div>
        
    </div>
</div>



<div class="card">
    <div class="card-content">
        <h3 class="title is-5 has-text-weight-normal">评论</h3>
        <!--added by susreal-->
        <div class="block is-size-6">
            <!-- <div class="level-left"> -->
                <div>
                    <span style="color:#1abc9c;">📧 邮箱：</span>
                    <span>留下邮箱，别人回复后会收到通知喔</span>
                </div>
                <div>
                    <span style="color:#1abc9c;">😉 头像：</span>
                    <span>自动同步邮箱对应的<a href="https://cn.gravatar.com/">「Gravatar」</a>头像</span>
                </div>
            <!-- </div> -->
        </div>
        <!--end-->
        
<div id="valine-thread" class="content"></div>
<script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src="//unpkg.com/valine/dist/Valine.min.js"></script>
<!-- search and delete "+'&v='+o+d" -->
<!-- <script src='/js/Valine.min.js'></script> -->
<script>
    new Valine({
        el: '#valine-thread' ,
        notify: false,
        verify: false,
        app_id: 'mBd0FeizSOG0HO7TUhSukd17-9Nh9j0Va',
        app_key: 'Ly6IgpdUqMrxJbWxI2GCoKrG',
        placeholder: '随便说说什么吧',
        avatar: 'identicon',
        pageSize: 5
    });
</script>

    </div>
</div>
</div>
                
                
                




<div class="column is-4-tablet is-4-desktop is-3-widescreen  has-order-3 column-right ">
    
        
<div class="card widget">
    <div class="card-content">
        <nav class="level">
            <div class="level-item has-text-centered">
                <div>
                    
                    <figure class="image is-128x128 has-mb-6">
                        <img class="is-rounded" src="//gravatar.loli.net/avatar/a3496ae7621e5f79c2cfca52ce9afa1d?s=128" alt="摆柿阔落">
                    </figure>
                    
                    
                    <p class="is-size-4 is-block has-mb-6">
                        摆柿阔落
                    </p>
                    
                    
                    <p class="is-size-6 is-block has-mb-6">
                        🖥 PM feat. Coder
                    </p>
                    
                    
                    <p class="is-size-6 is-flex is-flex-center has-text-grey">
                        <i class="fas fa-map-marker-alt has-mr-7"></i>
                        <span>Shanghai, China</span>
                    </p>
                    
                </div>
            </div>
        </nav>
        <nav class="level is-mobile">
            <div class="level-item has-text-centered is-marginless">
                <div>
                    <p class="heading">
                        文章
                    </p>
                    <p class="title has-text-weight-normal">
                        13
                    </p>
                </div>
            </div>
            <div class="level-item has-text-centered is-marginless">
                <div>
                    <p class="heading">
                        分类
                    </p>
                    <p class="title has-text-weight-normal">
                        3
                    </p>
                </div>
            </div>
            <div class="level-item has-text-centered is-marginless">
                <div>
                    <p class="heading">
                        标签
                    </p>
                    <p class="title has-text-weight-normal">
                        17
                    </p>
                </div>
            </div>
        </nav>
        <div class="level">
            <a class="level-item button is-link is-rounded" target="_blank" href="https://m.okjike.com/users/7AB42093-406C-46EC-854E-75CEF51CC236">
                关注我</a>
        </div>
        
        
    </div>
</div>
    
        
    
        
<div class="card widget">
    <div class="card-content">
        <div class="menu">
            <h3 class="menu-label">
                分类
            </h3>
            <ul class="menu-list">
            <li>
        <a class="level is-marginless" href="/categories/Coder/">
            <span class="level-start">
                <span class="level-item">Coder</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">8</span>
            </span>
        </a><ul><li>
        <a class="level is-marginless" href="/categories/Coder/Hexo/">
            <span class="level-start">
                <span class="level-item">Hexo</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">6</span>
            </span>
        </a></li></ul></li><li>
        <a class="level is-marginless" href="/categories/PM/">
            <span class="level-start">
                <span class="level-item">PM</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">5</span>
            </span>
        </a></li>
            </ul>
        </div>
    </div>
</div>
    
        
<div class="card widget">
    <div class="card-content">
        <h3 class="menu-label">
            标签云
        </h3>
        <a href="/tags/Bulma/" style="font-size: 10px;">Bulma</a> <a href="/tags/Hexo/" style="font-size: 20px;">Hexo</a> <a href="/tags/Nginx/" style="font-size: 12px;">Nginx</a> <a href="/tags/Node-js/" style="font-size: 10px;">Node.js</a> <a href="/tags/Pages/" style="font-size: 10px;">Pages</a> <a href="/tags/icarus/" style="font-size: 14px;">icarus</a> <a href="/tags/一个想法不一定对/" style="font-size: 14px;">一个想法不一定对</a> <a href="/tags/互动/" style="font-size: 10px;">互动</a> <a href="/tags/壁垒/" style="font-size: 10px;">壁垒</a> <a href="/tags/大学生/" style="font-size: 16px;">大学生</a> <a href="/tags/小程序/" style="font-size: 12px;">小程序</a> <a href="/tags/用户激励/" style="font-size: 10px;">用户激励</a> <a href="/tags/社交/" style="font-size: 16px;">社交</a> <a href="/tags/社区/" style="font-size: 18px;">社区</a> <a href="/tags/精选/" style="font-size: 10px;">精选</a> <a href="/tags/腾讯云/" style="font-size: 10px;">腾讯云</a> <a href="/tags/项目复盘/" style="font-size: 12px;">项目复盘</a>
    </div>
</div>

    
        
<div class="card widget">
    <div class="card-content">
        <h3 class="menu-label">
            最新文章
        </h3>
        
        <article class="media">
            
            <a href="/article/2020/yaktalk-2/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/article/2020/yaktalk-2/0.png" alt="内部创业方向选择的问题思考">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2020-02-25T13:04:10.000Z">2020-02-25</time></div>
                    <a href="/article/2020/yaktalk-2/" class="has-link-black-ter is-size-6">内部创业方向选择的问题思考</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/PM/">PM</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/article/2020/yaktalk-1/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/article/2020/yaktalk-1/0.png" alt="“大学生社区”项目复盘总结">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2020-02-17T03:37:14.000Z">2020-02-17</time></div>
                    <a href="/article/2020/yaktalk-1/" class="has-link-black-ter is-size-6">“大学生社区”项目复盘总结</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/PM/">PM</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/article/2020/miniprogram-2/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/article/2020/miniprogram-2/0.png" alt="python助力小程序“订阅消息”群推送">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2020-02-06T10:50:39.000Z">2020-02-06</time></div>
                    <a href="/article/2020/miniprogram-2/" class="has-link-black-ter is-size-6">python助力小程序“订阅消息”群推送</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/Coder/">Coder</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/article/2020/miniprogram/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/article/2020/miniprogram/0.png" alt="头像挂件君 | 小程序诞生记">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2020-01-30T13:06:27.000Z">2020-01-30</time></div>
                    <a href="/article/2020/miniprogram/" class="has-link-black-ter is-size-6">头像挂件君 | 小程序诞生记</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/Coder/">Coder</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/article/2019/talk-2/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/article/2019/talk-2/0.png" alt="大学生最终还是得搞社交啊">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2019-10-01T14:12:09.000Z">2019-10-01</time></div>
                    <a href="/article/2019/talk-2/" class="has-link-black-ter is-size-6">大学生最终还是得搞社交啊</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/PM/">PM</a>
                    </p>
                </div>
            </div>
        </article>
        
    </div>
</div>

    
    
</div>

                
            </div>
        </div>
    </section>
    <footer class="footer">
    <div class="container">
        <div class="level">
            <div class="level-start has-text-centered-mobile">
                <!-- <a class="footer-logo is-block has-mb-6" href="/">
                
                    <img src="/images/logo.png" alt="python助力小程序“订阅消息”群推送" height="28">
                
                </a> -->
                <p class="is-size-7">
                &copy; 2021 摆柿阔落&nbsp;
                Powered by <a href="https://hexo.io/" target="_blank">Hexo</a> & <a href="https://github.com/ppoffice/hexo-theme-icarus" target="_blank">Icarus</a>
                </p>
                <!--added by susreal, count pv and uv-->
                
                    <p class="is-size-7">   
                        <span id="busuanzi_container_site_uv">
                            ❤️ 感谢
                            <span id="busuanzi_value_site_uv">0</span>
                            位小伙伴的
                        </span>
                        <span id="busuanzi_container_site_pv">
                            <span id="busuanzi_value_site_pv">0</span>
                            次陪伴
                        </span>
                    </p>
                
                <!--end--> 
                <p id="icp" class="is-size-7">
                    <a href="http://beian.miit.gov.cn/" target="_blank">沪ICP备19004511号</a>
                </p>
            </div>
            <div class="level-end">
            
                <div class="field has-addons is-flex-center-mobile has-mt-5-mobile is-flex-wrap is-flex-middle">
                
                
                <p class="control">
                    <a class="button is-white is-large" target="_blank" title="Creative Commons" href="https://creativecommons.org/">
                        
                        <i class="fab fa-creative-commons"></i>
                        
                    </a>
                </p>
                
                <p class="control">
                    <a class="button is-white is-large" target="_blank" title="Attribution 4.0 International" href="https://creativecommons.org/licenses/by/4.0/">
                        
                        <i class="fab fa-creative-commons-by"></i>
                        
                    </a>
                </p>
                
                <p class="control">
                    <a class="button is-white is-large" target="_blank" title="Download on GitHub" href="http://github.com/Susreal">
                        
                        <i class="fab fa-github"></i>
                        
                    </a>
                </p>
                
                </div>
            
            </div>
        </div>
    </div>
    <script type="text/javascript">
        var hostname = location.hostname;
        if (hostname!="susreal.com" && hostname!="www.susreal.com") {
            var icp = document.getElementById('icp');
            icp.style.display="none";
        }
    </script>
</footer>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/moment@2.22.2/min/moment-with-locales.min.js"></script>
<script>moment.locale("zh-CN");</script>


    
    
    
    <script src="/js/animation.js"></script>
    

    
    
    
    <script src="https://cdn.jsdelivr.net/npm/lightgallery@1.6.8/dist/js/lightgallery.min.js" defer></script>
    <script src="https://cdn.jsdelivr.net/npm/justifiedGallery@3.7.0/dist/js/jquery.justifiedGallery.min.js" defer></script>
    <script src="/js/gallery.js" defer></script>
    

    
    

<div id="outdated">
    <h6>Your browser is out-of-date!</h6>
    <p>Update your browser to view this website correctly. <a id="btnUpdateBrowser" href="http://outdatedbrowser.com/">Update
            my browser now </a></p>
    <p class="last"><a href="#" id="btnCloseUpdateBrowser" title="Close">&times;</a></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/outdatedbrowser@1.1.5/outdatedbrowser/outdatedbrowser.min.js" defer></script>
<script>
    document.addEventListener("DOMContentLoaded", function () {
        outdatedBrowser({
            bgColor: '#f25648',
            color: '#ffffff',
            lowerThan: 'flex'
        });
    });
</script>


    
    
<script src="https://cdn.jsdelivr.net/npm/mathjax@2.7.5/unpacked/MathJax.js?config=TeX-MML-AM_CHTML" defer></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
    MathJax.Hub.Config({
        'HTML-CSS': {matchFontHeight: false},
        SVG: {matchFontHeight: false},
        CommonHTML: {matchFontHeight: false}
    });
});
</script>

    
    

<a id="back-to-top" title="回到顶端" href="javascript:;">
    <i class="fas fa-chevron-up"></i>
</a>
<script src="/js/back-to-top.js" defer></script>


    
    

    
    
    
    

    
    
    
    
    
    <script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.4/dist/clipboard.min.js" defer></script>
    <script src="/js/clipboard.js" defer></script>
    

    
    
    

    


<script src="/js/main.js" defer></script>

    
    <div class="searchbox ins-search">
    <div class="searchbox-container ins-search-container">
        <div class="searchbox-input-wrapper">
            <input type="text" class="searchbox-input ins-search-input" placeholder="想要查找什么...">
            <span class="searchbox-close ins-close ins-selectable"><i class="fa fa-times-circle"></i></span>
        </div>
        <div class="searchbox-result-wrapper ins-section-wrapper">
            <div class="ins-section-container"></div>
        </div>
    </div>
</div>
<script>
    (function (window) {
        var INSIGHT_CONFIG = {
            TRANSLATION: {
                POSTS: '文章',
                PAGES: '页面',
                CATEGORIES: '分类',
                TAGS: '标签',
                UNTITLED: '(无标题)',
            },
            CONTENT_URL: '/content.json',
        };
        window.INSIGHT_CONFIG = INSIGHT_CONFIG;
    })(window);
</script>
<script src="/js/insight.js" defer></script>
<link rel="stylesheet" href="/css/search.css">
<link rel="stylesheet" href="/css/insight.css">
    
</body>
</html>